Представьте библиотеку, где книги не размещаются по дате поступления, а по универсальному ключу. Это смена парадигмы от последовательной к ассоциативным контейнерам. Вместо того чтобы сканировать вектор линейно ($O(N)$), мы используем map или set для достижения логарифмического времени поиска ($O(\log n)$).
1. Природа ассоциации
В mapмы храним пары ключ-значение. Ключ выступает в качестве индекса, который может быть строкой, пользовательским объектом или любым типом, поддерживающим строгий слабый порядок. А set, напротив, хранит только уникальные ключи, что делает его идеальным инструментом для проверки принадлежности или фильтрации.
2. Упорядоченные и неупорядоченные
Стандартные контейнеры (map, set) хранят ключи в упорядоченном виде. Стандарт языка C++11 ввел неупорядоченные варианты (unordered_map), которые используют хеш-функцию для средней производительности $O(1)$. Ищите логотип C++11 при использовании этих высокопроизводительных бакетов.